// Lodop打印控件相关工具函数
declare global {
  interface Window {
    LODOP: any;
    getLodop: () => any;
  }
}

/**
 * 获取Lodop打印对象
 * @returns Lodop打印对象
 */
export function getLodop(): any {
  let LODOP: any;
  
  try {
    // 检查是否已经加载了Lodop
    if (typeof window !== 'undefined') {
      // 尝试获取Lodop对象
      LODOP = (window as any).getLodop ? (window as any).getLodop() : (window as any).LODOP;
      
      if (!LODOP) {
        console.warn('Lodop打印控件未正确加载，请检查是否已安装Lodop打印控件');
        return null;
      }
    }
  } catch (error) {
    console.error('获取Lodop对象失败:', error);
    return null;
  }
  
  return LODOP;
}

/**
 * 检查Lodop是否可用
 * @returns 是否可用
 */
export function isLodopReady(): boolean {
  const LODOP = getLodop();
  return !!(LODOP && LODOP.VERSION);
}

/**
 * 初始化Lodop打印任务
 * @param title 打印任务标题
 * @returns Lodop对象
 */
export function initLodopPrint(title: string = '打印任务'): any {
  const LODOP = getLodop();
  
  if (!LODOP) {
    throw new Error('Lodop打印控件不可用');
  }
  
  try {
    LODOP.PRINT_INITA(0, 0, 794, 1123, title);
    return LODOP;
  } catch (error) {
    console.error('初始化Lodop打印任务失败:', error);
    throw error;
  }
}

/**
 * 设置打印页面
 * @param LODOP Lodop对象
 * @param pageWidth 页面宽度(mm)
 * @param pageHeight 页面高度(mm)
 */
export function setLodopPageSize(LODOP: any, pageWidth: number = 210, pageHeight: number = 297): void {
  if (!LODOP) return;
  
  try {
    // 设置纸张大小
    LODOP.SET_PRINT_PAGESIZE(1, pageWidth + 'mm', pageHeight + 'mm', '');
  } catch (error) {
    console.error('设置Lodop页面大小失败:', error);
  }
}

/**
 * 添加文本内容
 * @param LODOP Lodop对象
 * @param top 上边距
 * @param left 左边距
 * @param width 宽度
 * @param height 高度
 * @param text 文本内容
 * @param fontSize 字体大小
 */
export function addLodopText(
  LODOP: any, 
  top: number, 
  left: number, 
  width: number, 
  height: number, 
  text: string, 
  fontSize: number = 12
): void {
  if (!LODOP) return;
  
  try {
    LODOP.ADD_PRINT_TEXT(top, left, width, height, text);
    LODOP.SET_PRINT_STYLEA(0, 'FontSize', fontSize);
  } catch (error) {
    console.error('添加Lodop文本失败:', error);
  }
}

/**
 * 添加条码
 * @param LODOP Lodop对象
 * @param top 上边距
 * @param left 左边距
 * @param width 宽度
 * @param height 高度
 * @param codeType 条码类型
 * @param codeValue 条码值
 */
export function addLodopBarcode(
  LODOP: any,
  top: number,
  left: number,
  width: number,
  height: number,
  codeType: string = '128A',
  codeValue: string
): void {
  if (!LODOP) return;
  
  try {
    LODOP.ADD_PRINT_BARCODE(top, left, width, height, codeType, codeValue);
  } catch (error) {
    console.error('添加Lodop条码失败:', error);
  }
}

/**
 * 预览打印
 * @param LODOP Lodop对象
 */
export function previewLodopPrint(LODOP: any): void {
  if (!LODOP) return;
  
  try {
    LODOP.PREVIEW();
  } catch (error) {
    console.error('Lodop预览失败:', error);
  }
}

/**
 * 直接打印
 * @param LODOP Lodop对象
 */
export function printLodop(LODOP: any): void {
  if (!LODOP) return;
  
  try {
    LODOP.PRINT();
  } catch (error) {
    console.error('Lodop打印失败:', error);
  }
}

/**
 * 打印设计
 * @param LODOP Lodop对象
 */
export function designLodopPrint(LODOP: any): void {
  if (!LODOP) return;
  
  try {
    LODOP.PRINT_DESIGN();
  } catch (error) {
    console.error('Lodop打印设计失败:', error);
  }
} 